/*
* Copyright (c) 2016 ShopJsp. All Rights Reserved.
 * ============================================================================
 * 版权所有 2011 - 今 北京华宇盈通科技有限公司，并保留所有权利。
 * ----------------------------------------------------------------------------
 * 提示：在未取得SHOPJSP商业授权之前，您不能将本软件应用于商业用途，否则SHOPJSP将保留追究的权力。
 * ----------------------------------------------------------------------------
 * 官方网站：http://www.shopjsp.com
 * ============================================================================
*/
package com.hyyt.shopjsp.util.date;


import com.hyyt.shopjsp.util.common.EnumUtils;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil {

    @SuppressWarnings("unused")
    public static void main(String[] args) {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(EnumUtils.DataFormat.Y_M_D.getValue());
        String specifiedDay = sdf.format(date);
    }

    /**
     * 获得指定日期的前一天
     *
     * @param specifiedDay
     * @return
     * @throws Exception
     */
    public static String getSpecifiedDayBefore(String specifiedDay) {//可以用new Date().toLocalString()传递参数
        Calendar c = Calendar.getInstance();
        Date date = null;
        try {
            date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        c.setTime(date);
        int day = c.get(Calendar.DATE);
        c.set(Calendar.DATE, day - 1);

        String dayBefore = new SimpleDateFormat(EnumUtils.DataFormat.Y_M_D.getValue()).format(c
                .getTime());
        return dayBefore;
    }

    /**
     * 获得指定日期的后一天
     *
     * @param specifiedDay
     * @return
     */
    public static String getSpecifiedDayAfter(String specifiedDay) {
        Calendar c = Calendar.getInstance();
        Date date = null;
        try {
            date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        c.setTime(date);
        int day = c.get(Calendar.DATE);
        c.set(Calendar.DATE, day + 1);

        String dayAfter = new SimpleDateFormat(EnumUtils.DataFormat.Y_M_D.getValue())
                .format(c.getTime());
        return dayAfter;
    }

    /**
     * 获得指定日期的后两天
     *
     * @param specifiedDay
     * @return
     */
    public static String getSpecifiedDayAfterTwo(String specifiedDay) {
        Calendar c = Calendar.getInstance();
        Date date = null;
        try {
            date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        c.setTime(date);
        int day = c.get(Calendar.DATE);
        c.set(Calendar.DATE, day + 2);

        String dayAfter = new SimpleDateFormat(EnumUtils.DataFormat.Y_M_D.getValue())
                .format(c.getTime());
        return dayAfter;

    }

    /**
     * 获取当前时间 Timestamp类型
     *
     * @return
     */
    public static Timestamp getCurrentTimestamp() {
        return new Timestamp(new Date().getTime());
    }

    /**
     * 日期格式化工具类，格式为 yyyy-MM-dd hh:mm:ss 年月日 时分秒
     * @param date 时间
     * @return
     */
    public static String dateToStringYMDHMS(Date date){
        SimpleDateFormat sdf = new SimpleDateFormat(EnumUtils.DataFormat.Y_M_D_H_m_s.getValue());
        return sdf.format(date);
    }

    /**
     * 日期格式化工具类，格式为 yyyy-MM-dd 年月日
     * @param date 时间
     * @return
     */
    public static String dateToStringYTD(Date date){
        SimpleDateFormat sdf = new SimpleDateFormat(EnumUtils.DataFormat.Y_M_D.getValue());
        return sdf.format(date);
    }

    /**
     * 日期格式化工具类，格式为 yyyy-MM-dd 年月日
     * @param date 时间
     * @return
     */
    public static String dateToStringYear(Date date){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
        return sdf.format(date);
    }

    /**
     * 日期格式化工具类，格式为 yyyy-MM-dd hh:mm:ss 年月日 时分秒
     * @param date 时间
     * @return
     */
    public static Date stringToDateYTD(String date){
        Date d = null;
        SimpleDateFormat sdf = new SimpleDateFormat(EnumUtils.DataFormat.Y_M_D_H_m_s.getValue());
        try {
            d = sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return d;
    }
}